import localCache from '@/utils/cache.js'
import router from '@/router/index.js'

// const home = {id: 0, name: '首页', type: 2, path: '/home/dashboard'}

const tagsViewModule = {
  // 开启命名空间
  namespaced: true,
  state() {
    return {
      tagList: localCache.getCache('tagsView') ?? [ ]
    }
  },
  mutations: {

    // 直接更改 tag，用于退出时的清空操作
    changeTagsView(state, payload) {
      state.tagList = payload
    },

    // 添加 tag
    addTagsView(state, payload) {
      const findTag = state.tagList.find(tag => tag.id === payload.id)
      if (findTag) return;
      state.tagList = [...state.tagList, payload]
      localCache.setCache('tagsView', state.tagList)
    },

    // 移除 tag：  移除单个 || 移除其他  || 移除全部
    // @param { type: 'self'||'other'||'all', tag: tag } payload
    removeTagsView(state, payload) {
      if (payload.type === 'self') {
        // 如果关闭的tag是当前窗口，就让路由跳转到前一个路径
        if (payload.data.current.includes(payload.data.tag.path)) {
          router.replace(state.tagList[payload.data.index - 1].path) 
        }
         const newTags = state.tagList.filter(tag => tag.id !== payload.data.tag.id)
         state.tagList = newTags
      } else if (payload.type === 'other') {
         // 第一个首页不再判断列表中，所以进行截取，只过滤后面的部分
         const newTags = state.tagList.splice(1).filter(tag => tag.id === payload.data.tag.id)
         router.replace(payload.data.tag.path) // 将路由跳转到当前传过来的路径
         state.tagList.push(...newTags)
       } else if (payload.type === 'all') {
        //  保留第一个tag首页(截取第一个元素)
         state.tagList = [...state.tagList.splice(0,1)]
         router.replace(state.tagList[0].path)
       }
       localCache.setCache('tagsView', state.tagList) // 将最新的 tagsView 保存到本地
    }
  },
  actions: {},
}

export default tagsViewModule